package top.jnaw.jee.utils.baidu;

/**
 * Copyright (C) 2018 版权所有。 <p> 文件名： 文件功能描述：
 *
 * @author lc  2018/6/29 15:47 创建内容： <p> <p> 修改标识： 修改原因：
 */


import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.PropKit;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
import top.jnaw.jee.utils.Cache;
import top.jnaw.jee.utils.Log;
import top.jnaw.jee.utils.Strings;

public class AuthService {

  /**
   * 获取权限token
   *
   * @return 返回示例： { "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
   * "expires_in": 2592000 }
   */
  public static String getAuth() {
    // 官网获取的 API Key 更新为你注册的
    String clientId = PropKit.get("baidu_apiKey");
    // 官网获取的 Secret Key 更新为你注册的
    String clientSecret = PropKit.get("baidu_secretKey");
    return getAuth(clientId, clientSecret);
  }

  /**
   * 获取API访问token 该token有一定的有效期，需要自行管理，当失效时需重新获取.
   *
   * @param ak - 百度云官网获取的 API Key
   * @param sk - 百度云官网获取的 Securet Key
   * @return assess_token 示例： "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
   */
  public static String getAuth(String ak, String sk) {

    String access_token = "";
    //从redis 获取token ，没有获取新的
    if (null == Cache.get("baidu_token")) {
      // 获取token地址
      String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
      String getAccessTokenUrl = authHost
          // 1. grant_type为固定参数
          + "grant_type=client_credentials"
          // 2. 官网获取的 API Key
          + "&client_id=" + ak
          // 3. 官网获取的 Secret Key
          + "&client_secret=" + sk;
      try {
        URL realUrl = new URL(getAccessTokenUrl);
        // 打开和URL之间的连接
        HttpURLConnection connection = (HttpURLConnection) realUrl
            .openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        // 获取所有响应头字段
        Map<String, List<String>> map = connection.getHeaderFields();
        // 遍历所有的响应头字段
        for (String key : map.keySet()) {
          Log.w(key + "--->" + map.get(key));
        }
        // 定义 BufferedReader输入流来读取URL的响应
        BufferedReader in = new BufferedReader(
            new InputStreamReader(connection.getInputStream()));
        String result = "";
        String line;
        while ((line = in.readLine()) != null) {
          result += line;
        }
        /**
         * 返回结果示例
         */
        JSONObject jsonObject = Strings.toJSONObject(result);
        access_token = jsonObject.getString("access_token");
      } catch (Exception e) {
        Log.w("获取token失败！");
        e.printStackTrace(System.err);
      }
      Cache.setx("baidu_token", access_token, 2592000);
    } else {

      access_token = Cache.get("baidu_token").toString();
    }

    return access_token;
  }

}
